package gestion.camping.vue;

import gestion.camping.controleur.TarifController;
import gestion.camping.dto.Saison;
import gestion.camping.dto.Tarif;
import gestion.camping.dto.TypeLocation;
import gestion.camping.utils.MessagesUtil;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class ViewTarifDetail extends JDialog implements ActionListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = -17760458983364266L;

	
	private JButton btnEnregister;
	private JButton btnAnnuler;
	
	private Tarif tarif;
	private TarifController controller;
	private List<Saison> listSaison = new ArrayList<Saison>();
	private List<TypeLocation> listTypeLocation = new ArrayList<TypeLocation>();

	private JButton btnRetourListe;
	private JTextField textFieldPrix;
	private JTextField textSaison;
	private JTextField textTypeLocation;
	private JComboBox comboBoxSaison;
	private JComboBox comboBoxTypeLocation;


	/**
	 * Create the frame.
	 */
	public ViewTarifDetail(TarifController controller) {
	
		this.controller = controller; 
		this.tarif = controller.getTarif();
		
		initCompoment();
		
		setModal(true);
		
		setListSaison(controller.getListSaison());
		setListTypeLocation(controller.getListTypeLocation());
	}
	

	public void initCompoment(){
	
		
		setBounds(0, 25, 700, 500);
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{0,0, 0, 0};
		gridBagLayout.rowHeights = new int[]{40, 40, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0};
		gridBagLayout.columnWeights = new double[]{0.3, 0.0, 1.0, 1.0};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
		getContentPane().setLayout(gridBagLayout);
		
		
		btnRetourListe = new JButton(MessagesUtil.formatMessage("tarif.ajout.btn.retour"));
		btnRetourListe.addActionListener(this);
		GridBagConstraints gbc_btnRetourListe = new GridBagConstraints();
		gbc_btnRetourListe.anchor = GridBagConstraints.WEST;
		gbc_btnRetourListe.insets = new Insets(0, 0, 5, 0);
		gbc_btnRetourListe.gridx = 3;
		gbc_btnRetourListe.gridy = 0;
		getContentPane().add(btnRetourListe, gbc_btnRetourListe);
		
		btnEnregister = new JButton(MessagesUtil.formatMessage("tarif.ajout.btn.enregistrer"));
		btnEnregister.addActionListener(this);
		
		JLabel lblNumro = new JLabel(MessagesUtil.formatMessage("tarif.ajout.prix"));
		GridBagConstraints gbc_lblNumro = new GridBagConstraints();
		gbc_lblNumro.anchor = GridBagConstraints.EAST;
		gbc_lblNumro.insets = new Insets(0, 0, 5, 5);
		gbc_lblNumro.gridx = 1;
		gbc_lblNumro.gridy = 6;
		getContentPane().add(lblNumro, gbc_lblNumro);
		
		textFieldPrix = new JTextField();
		if(tarif.getTarif() != 0){
			textFieldPrix.setText(String.valueOf(tarif.getTarif()));
		}
		GridBagConstraints gbc_textFieldNum = new GridBagConstraints();
		gbc_textFieldNum.insets = new Insets(0, 0, 5, 5);
		gbc_textFieldNum.fill = GridBagConstraints.HORIZONTAL;
		gbc_textFieldNum.gridx = 2;
		gbc_textFieldNum.gridy = 6;
		getContentPane().add(textFieldPrix, gbc_textFieldNum);
		textFieldPrix.setColumns(10);
		
		JLabel lblSecteur = new JLabel(MessagesUtil.formatMessage("tarif.ajout.saison"));
		GridBagConstraints gbc_lblSecteur = new GridBagConstraints();
		gbc_lblSecteur.insets = new Insets(0, 0, 5, 5);
		gbc_lblSecteur.anchor = GridBagConstraints.EAST;
		gbc_lblSecteur.gridx = 1;
		gbc_lblSecteur.gridy = 4;
		getContentPane().add(lblSecteur, gbc_lblSecteur);
		
		if(tarif.getSaison() == null){
			comboBoxSaison = new JComboBox();
			GridBagConstraints gbc_comboBoxSaison = new GridBagConstraints();
			gbc_comboBoxSaison.insets = new Insets(0, 0, 5, 5);
			gbc_comboBoxSaison.fill = GridBagConstraints.HORIZONTAL;
			gbc_comboBoxSaison.gridx = 2;
			gbc_comboBoxSaison.gridy = 4;
			getContentPane().add(comboBoxSaison, gbc_comboBoxSaison);
		}else{
			textSaison = new JTextField(tarif.getSaison().getLibelle() + " - du "+ tarif.getSaison().getDateDebutString() + 
																		" au "+ tarif.getSaison().getDateFinString() );
			textSaison.setEnabled(false);
			GridBagConstraints gbc_textSaison = new GridBagConstraints();
			gbc_textSaison.insets = new Insets(0, 0, 5, 5);
			gbc_textSaison.fill = GridBagConstraints.HORIZONTAL;
			gbc_textSaison.gridx = 2;
			gbc_textSaison.gridy = 4;
			getContentPane().add(textSaison, gbc_textSaison);
		}
		
		JLabel lblTypeDeTerrain = new JLabel(MessagesUtil.formatMessage("tarif.ajout.typelocation"));
		GridBagConstraints gbc_lblTypeDeLocation = new GridBagConstraints();
		gbc_lblTypeDeLocation.anchor = GridBagConstraints.EAST;
		gbc_lblTypeDeLocation.insets = new Insets(0, 0, 5, 5);
		gbc_lblTypeDeLocation.gridx = 1;
		gbc_lblTypeDeLocation.gridy = 5;
		getContentPane().add(lblTypeDeTerrain, gbc_lblTypeDeLocation);
		
		if(tarif.getTypeLocation() == null){
			comboBoxTypeLocation = new JComboBox();
			GridBagConstraints gbc_comboBoxTypeLocation = new GridBagConstraints();
			gbc_comboBoxTypeLocation.insets = new Insets(0, 0, 5, 5);
			gbc_comboBoxTypeLocation.fill = GridBagConstraints.HORIZONTAL;
			gbc_comboBoxTypeLocation.gridx = 2;
			gbc_comboBoxTypeLocation.gridy = 5;
			getContentPane().add(comboBoxTypeLocation, gbc_comboBoxTypeLocation);
		}else{
			textTypeLocation = new JTextField(tarif.getTypeLocation().getLibelle());
			textTypeLocation.setEnabled(false);
			GridBagConstraints gbc_textLocation = new GridBagConstraints();
			gbc_textLocation.insets = new Insets(0, 0, 5, 5);
			gbc_textLocation.fill = GridBagConstraints.HORIZONTAL;
			gbc_textLocation.gridx = 2;
			gbc_textLocation.gridy = 5;
			getContentPane().add(textTypeLocation, gbc_textLocation);
		}
		
		
		GridBagConstraints gbc_btnEnregister = new GridBagConstraints();
		gbc_btnEnregister.anchor = GridBagConstraints.EAST;
		gbc_btnEnregister.insets = new Insets(0, 0, 5, 5);
		gbc_btnEnregister.gridx = 2;
		gbc_btnEnregister.gridy = 10;
		getContentPane().add(btnEnregister, gbc_btnEnregister);
		
		btnAnnuler = new JButton(MessagesUtil.formatMessage("tarif.ajout.btn.annuler"));
		btnAnnuler.addActionListener(this);
		GridBagConstraints gbc_btnAnnuler = new GridBagConstraints();
		gbc_btnAnnuler.anchor = GridBagConstraints.WEST;
		gbc_btnAnnuler.insets = new Insets(0, 0, 5, 0);
		gbc_btnAnnuler.gridx = 3;
		gbc_btnAnnuler.gridy = 10;
		getContentPane().add(btnAnnuler, gbc_btnAnnuler);
	}
	
	
	public void update(){	
		
		this.getContentPane().removeAll();
		
		initCompoment();
		
		
		if(tarif.getSaison() == null){
			//Mise à jour de la liste déroulante
		    //Supprime tout les anciens éléments
			comboBoxSaison.removeAllItems();
			
			// On insère ensuite les nouvelles valeurs
			for(Saison saison : listSaison){
				comboBoxSaison.addItem(saison.getId());
			}
		}else{
			textSaison.setText(tarif.getSaison().getLibelle() + " - du "+ tarif.getSaison().getDateDebutString() + 
																" au "+ tarif.getSaison().getDateFinString() );
		}
		
		if(tarif.getTypeLocation() == null){
			//Mise à jour de la liste déroulante
		    //Supprime tout les anciens éléments
			comboBoxTypeLocation.removeAllItems();
			
			// On insère ensuite les nouvelles valeurs
			for(TypeLocation typeLocation : listTypeLocation){
				comboBoxTypeLocation.addItem(typeLocation.getLibelle());
			}
		}else{
			textTypeLocation.setText(tarif.getTypeLocation().getLibelle());
		}
		
		
		if(tarif.getTarif() != 0){
			textFieldPrix.setText(String.valueOf(tarif.getTarif()));
		}
		
		this.repaint();
	}

	public Tarif getTarif() {
		return tarif;
	}

	public void setTarif(Tarif tarif) {
		this.tarif = tarif;		
		update();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		if(tarif.getSaison() == null){
			tarif.setSaison(listSaison.get(comboBoxSaison.getSelectedIndex()));
		}
		
		if(tarif.getTypeLocation() == null){
			tarif.setTypeLocation(listTypeLocation.get(comboBoxTypeLocation.getSelectedIndex()));
		}
		
		Double prix = textFieldPrix.getText() == null || textFieldPrix.getText().equals("") ? null : Double.valueOf(textFieldPrix.getText());
		if(prix != null){
			tarif.setTarif(prix);
		}
		
		
		if(e.getSource() == this.btnEnregister){
			controller.enregistrer(tarif);
		}else if(e.getSource() == this.btnAnnuler){
			update();
		}else if(e.getSource() == this.btnRetourListe){		
			this.dispose();
			controller.retour();
		}
	}

	public List<Saison> getListSaison() {
		return listSaison;
	}

	public void setListSaison(List<Saison> listSaison) {
		this.listSaison = listSaison;
		
		update();
	}

	public void setListTypeLocation(List<TypeLocation> listTypeLocation) {
		this.listTypeLocation = listTypeLocation;
		
		update();
	}
		
}
